<!DOCTYPE html>
<html  lang="zh">
<head>
    <!-- hexo-inject:begin --><!-- hexo-inject:end --><meta charset="utf-8" />

<meta name="generator" content="Hexo 3.9.0" />

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />

<title>shader学习23-Unity中的渲染优化技术 - 游戏人生</title>


    <meta name="description" content="shade学习">
<meta name="keywords" content="学习">
<meta property="og:type" content="article">
<meta property="og:title" content="shader学习23-Unity中的渲染优化技术">
<meta property="og:url" content="http://cloundgame.gitee.io/mystudy/2020/07/18/shader学习23-Unity中的渲染优化技术/index.html">
<meta property="og:site_name" content="游戏人生">
<meta property="og:description" content="shade学习">
<meta property="og:locale" content="zh-CN">
<meta property="og:image" content="http://cloundgame.gitee.io/mystudy/images/og_image.png">
<meta property="og:updated_time" content="2020-07-19T09:34:42.942Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="shader学习23-Unity中的渲染优化技术">
<meta name="twitter:description" content="shade学习">
<meta name="twitter:image" content="http://cloundgame.gitee.io/mystudy/images/og_image.png">







<link rel="icon" href="/mystudy/images/favicon.svg">


<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.7.2/css/bulma.css">
<link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/font-awesome/5.9.0/css/all.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Ubuntu:400,600|Source+Code+Pro">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/highlight.js@9.12.0/styles/atom-one-dark.css">


    
    
    
    <style>body>.footer,body>.navbar,body>.section{opacity:0}</style>
    

    
    
    
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/lightgallery@1.6.8/dist/css/lightgallery.min.css">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/justifiedGallery@3.7.0/dist/css/justifiedGallery.min.css">
    

    
    

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/outdatedbrowser@1.1.5/outdatedbrowser/outdatedbrowser.min.css">


    
    
    
    

<link rel="stylesheet" href="/mystudy/css/back-to-top.css">


    
    

    
    
    
    

    
    
<link rel="stylesheet" href="/mystudy/css/progressbar.css">
<script src="https://cdn.jsdelivr.net/npm/pace-js@1.0.2/pace.min.js"></script>

    
    
    
        <script async="" src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
    

    


<link rel="stylesheet" href="/mystudy/css/style.css"><!-- hexo-inject:begin --><!-- hexo-inject:end -->
</head>
<body class="is-3-column">
    <!-- hexo-inject:begin --><!-- hexo-inject:end --><nav class="navbar navbar-main">
    <div class="container">
        <div class="navbar-brand is-flex-center">
            <a class="navbar-item navbar-logo" href="/mystudy/">
            
                <img src="/mystudy/images/logo.svg" alt="shader学习23-Unity中的渲染优化技术" height="28">
            
            </a>
        </div>
        <div class="navbar-menu">
            
            <div class="navbar-start">
                
                <a class="navbar-item"
                href="/mystudy/">主页</a>
                
                <a class="navbar-item"
                href="/mystudy/archives">日志</a>
                
                <a class="navbar-item"
                href="/mystudy/categories">分类</a>
                
                <a class="navbar-item"
                href="/mystudy/">关于</a>
                
            </div>
            
            <div class="navbar-end">
                
                    
                    
                    <a class="navbar-item" target="_blank" title="Download on GitHub" href="https://github.com/koliy/koliy.github.io">
                        
                        <i class="fab fa-github"></i>
                        
                    </a>
                    
                
                
                <a class="navbar-item is-hidden-tablet catalogue" title="目录" href="javascript:;">
                    <i class="fas fa-list-ul"></i>
                </a>
                
                
                <a class="navbar-item search" title="搜索" href="javascript:;">
                    <i class="fas fa-search"></i>
                </a>
                
            </div>
        </div>
    </div>
</nav>
    
    <section class="section">
        <div class="container">
            <div class="columns">
                <div class="column is-8-tablet is-8-desktop is-6-widescreen has-order-2 column-main"><div class="card">
    
    <div class="card-content article ">
        
        <div class="level article-meta is-size-7 is-uppercase is-mobile is-overflow-x-auto">
            <div class="level-left">
                <time class="level-item has-text-grey" datetime="2020-07-18T08:16:33.000Z">2020-07-18</time>
                
                <div class="level-item">
                <a class="has-link-grey -link" href="/mystudy/categories/shade学习/">shade学习</a>
                </div>
                
                
                <span class="level-item has-text-grey">
                    
                    
                    21 分钟 读完 (大约 3096 个字)
                </span>
                
                
                <span class="level-item has-text-grey" id="busuanzi_container_page_pv">
                    <i class="far fa-eye"></i>
                    <span id="busuanzi_value_page_pv">0</span>次访问
                </span>
                
            </div>
        </div>
        
        <h1 class="title is-size-3 is-size-4-mobile has-text-weight-normal">
            
                shader学习23-Unity中的渲染优化技术
            
        </h1>
        <div class="content">
            <h2 id="影响性能的因素"><a href="#影响性能的因素" class="headerlink" title="影响性能的因素"></a><strong>影响性能的因素</strong></h2><p>在学习如何优化之前，我们得了解影响游戏性能的因素有哪些，才能对症下药。对于一个游戏来说，它主要需要使用两种计算资源：CPU和GPU。它们会相互合作，来让我们的游戏可以在预期的帧率和分辨率下工作。其中，CPU主要负责保证帧率，GPU主要复杂分辨率相关的一些处理.</p>
<a id="more"></a>
<p>据此，我们可以把造成游戏性能瓶颈的主要原因分成以下几个方面:</p>
<h4 id="CPU"><a href="#CPU" class="headerlink" title="CPU"></a><strong>CPU</strong></h4><ul>
<li>过多的drawCall</li>
<li>复杂的脚本或物理模拟</li>
</ul>
<h4 id="GPU"><a href="#GPU" class="headerlink" title="GPU"></a><strong>GPU</strong></h4><h6 id="顶点处理"><a href="#顶点处理" class="headerlink" title="顶点处理"></a><strong>顶点处理</strong></h6><ul>
<li>过多的顶点</li>
<li>过多的逐顶点计算</li>
</ul>
<h6 id="片元处理"><a href="#片元处理" class="headerlink" title="片元处理"></a><strong>片元处理</strong></h6><ul>
<li>过多的片元(可能是由于分辨率造成，也可能是由于overdraw造成)</li>
<li>过多的逐片元计算</li>
</ul>
<h6 id="带宽"><a href="#带宽" class="headerlink" title="带宽"></a><strong>带宽</strong></h6><ul>
<li>使用了尺寸很大且未压缩的纹理</li>
<li>分辨率过高的帧缓存</li>
</ul>
<h2 id="性能瓶颈"><a href="#性能瓶颈" class="headerlink" title="性能瓶颈"></a><strong>性能瓶颈</strong></h2><h4 id="CPU的draw-call"><a href="#CPU的draw-call" class="headerlink" title="CPU的draw call"></a><strong>CPU的draw call</strong></h4><p>对于CPU来说，限制它的主要是每一帧中draw call的数目。cpu在每次通知gpu进行渲染前，都需要提前准备好顶点的数据(如位置，法线，颜色，纹理坐标等),然后调用一系列API把它们放到gpu可以访问到的指定位置，最后，调用一个绘制命令，通知GPU，而调用绘制命令的时候，就会产生一个draw call。<br>每次调用draw call时，cpu往往都需要改变很多渲染状态的设置，而这些操作是非常耗时的。</p>
<h4 id="GPU-1"><a href="#GPU-1" class="headerlink" title="GPU"></a><strong>GPU</strong></h4><p>而对于GPU来说，它负责整个渲染流水线。它从处理cpu传递过来的模型数据开始，进行顶点着色器，片元着色器等一系列工作，最后输出屏幕上的每个像素，因此，<strong>GPU的性能瓶颈和需要处理的顶点数目，屏幕分辨率，显存等因素有光</strong>.而相关的优化策略可以从减少处理的数据模型(顶点,片元数目),减少运算复杂度等方面入手。</p>
<h2 id="优化技术"><a href="#优化技术" class="headerlink" title="优化技术"></a><strong>优化技术</strong></h2><h4 id="CPU优化"><a href="#CPU优化" class="headerlink" title="CPU优化"></a><strong>CPU优化</strong></h4><ul>
<li>使用批处理技术减少draw call数目</li>
</ul>
<h4 id="GPU优化"><a href="#GPU优化" class="headerlink" title="GPU优化"></a><strong>GPU优化</strong></h4><h6 id="减少需要处理的顶点数目"><a href="#减少需要处理的顶点数目" class="headerlink" title="减少需要处理的顶点数目"></a><strong>减少需要处理的顶点数目</strong></h6><ul>
<li>优化几何体</li>
<li>使用模型的LOD技术</li>
<li>使用遮挡剔除技术</li>
</ul>
<h6 id="减少需要处理的片元数目"><a href="#减少需要处理的片元数目" class="headerlink" title="减少需要处理的片元数目"></a><strong>减少需要处理的片元数目</strong></h6><ul>
<li>控制绘制顺序</li>
<li>警惕透明物体</li>
<li>减少实时光照</li>
</ul>
<h6 id="减少计算复杂度"><a href="#减少计算复杂度" class="headerlink" title="减少计算复杂度"></a><strong>减少计算复杂度</strong></h6><ul>
<li>使用shader的LOD技术</li>
<li>代码方面优化</li>
</ul>
<h4 id="节省内存带宽"><a href="#节省内存带宽" class="headerlink" title="节省内存带宽"></a><strong>节省内存带宽</strong></h4><ul>
<li>减少纹理大小</li>
<li>利用分辨率缩放</li>
</ul>
<h2 id="批处理"><a href="#批处理" class="headerlink" title="批处理"></a><strong>批处理</strong></h2><p>批处理的实现原理就是为了减少每帧需要的drawcall数目。只有使用同一个材质的物体，才可以进行批处理，因为，对于同一个材质的物体，它们之间的不同仅仅在于顶点数据的差别。我们可以把这些顶点数据合并在一起，再一起发送给GPU，就可以完成一次批处理.<br>unity支持两种批处理方式:</p>
<ul>
<li>动态批处理</li>
<li>静态批处理</li>
</ul>
<h4 id="动态批处理"><a href="#动态批处理" class="headerlink" title="动态批处理"></a><strong>动态批处理</strong></h4><p>动态批处理的基本原理是，每一帧把可以进行批处理的模型网格进行合并，再把合并后的模型数据传递给GPU，然后使用同一个材质对其渲染。除了实现方便，动态批处理的好处是，经过批处理的物体仍可以移动，这是由于在处理每帧时unity都会重新合并一次网格.</p>
<h4 id="条件限制"><a href="#条件限制" class="headerlink" title="条件限制"></a><strong>条件限制</strong></h4><ul>
<li>动态批处理的网格的顶点属性规模要小于900。<br>如果shader中需要使用顶点位置，法线和纹理这3个顶点属性(a2v定义的)，则它的顶点数目不能超过300.(后期unity版本可能会发生变化)</li>
<li>同一材质的模型对象都需要统一scale(1,1.5,2,3等),unity新版本应该已经不限制了</li>
<li>使用光照纹理lightmap的物体，需要保证它们指向光照纹理中的同一个位置(光照纹理上的索引，偏移量和缩放信息等)</li>
<li>多Pass的shader会中断批处理。<br>比如，点光源的影响</li>
</ul>
<h4 id="静态批处理"><a href="#静态批处理" class="headerlink" title="静态批处理"></a><strong>静态批处理</strong></h4><p>静态批处理适用于任何大小的几何模型。<br>它的实现原理:<br>只在运行开始阶段，把需要进行静态批处理的模型合并到一个新的网格结构中，这意外着这些模型不可以在运行时刻被移动。但由于它只需要进行一次合并操作，因此，比动态批处理更加高效。<br>缺点:<br>需要占用更多的内存来存储合并后的几何结构，因为，如果在静态批处理前一些物体共享了相同的网格，那么在内存中每一个物体都会对应一个网格的复杂品，既一个网格会变成多个网格再发送给GPU。一旦这类使用同一网格的对象过多，那么就会造成一个性能瓶颈.<br>例如:<br>一个使用了1000个相同树模型的森林中使用静态批处理，就会多使用1000倍的内存，这会造成严重的内存影响。这种情况，解决方法牺牲内存换性能，要么不使用静态批处理，而使用动态批处理(控制顶点数)，或者自己编写批处理方法.</p>
<p>-<strong>如果场景中包含了除平行光以外的其它光源，并且在shader中定义了额外的Pass来处理它们，这些额外的Pass部分是不会被批处理的，但是处理平行光的BasePass部分仍然会被静态批处理</strong></p>
<h4 id="批处理注意事项"><a href="#批处理注意事项" class="headerlink" title="批处理注意事项"></a><strong>批处理注意事项</strong></h4><ul>
<li>尽可能选择静态批处理，但得小心内存的消耗，并且静态批处理的物体不能再被移动</li>
<li>对于游戏中的小道具，例如可以拾取的金币等，可以使用动态批处理</li>
<li>对于包含动画的这类物体，无法全部使用静态批处理，但其中如果有不动的部分，可以把这部分标识为Static。</li>
</ul>
<p>由于批处理需要把多个模型变换到世界空间下再合并它们，因此如果shader中存在一些基本模型空间下的坐标运算，那么往往会得到错误的结果，解决方法是，在shader中使用DisableBatching标签来强制使用该shader的材质不会被批处理。<br>使用半透明材质的物体，通常需要使用严格的从后往前的绘制顺序来保证透明混合的正确性，对于这些物体，unity会首先保证它们的绘制顺序，再尝试对它们进行批处理。意味着，当绘制顺序无法满足时，批处理无法在这些物体上应用。</p>
<h2 id="减少需要处理的顶点数目-1"><a href="#减少需要处理的顶点数目-1" class="headerlink" title="减少需要处理的顶点数目"></a><strong>减少需要处理的顶点数目</strong></h2><h4 id="优化几何体"><a href="#优化几何体" class="headerlink" title="优化几何体"></a><strong>优化几何体</strong></h4><p>移除不必要的硬边和纹理衔接，避免边界平滑和纹理分离</p>
<h4 id="模型的LOD技术"><a href="#模型的LOD技术" class="headerlink" title="模型的LOD技术"></a><strong>模型的LOD技术</strong></h4><p>原理：当一个物体离摄像机很远时，模型上的很多细节是无法被察觉到的。因此LOD允许对象逐渐远离摄像机时，减少模型上的面片数量，从而提高性能.</p>
<h4 id="遮挡剔除技术"><a href="#遮挡剔除技术" class="headerlink" title="遮挡剔除技术"></a><strong>遮挡剔除技术</strong></h4><p>遮挡剔除可以用来消除那些在其他物体后面看不到的物件部分，这意味着资源不会浪费在计算那些看不到的顶点上，进而提升性能.</p>
<h2 id="减少需要处理的片元数目-1"><a href="#减少需要处理的片元数目-1" class="headerlink" title="减少需要处理的片元数目"></a><strong>减少需要处理的片元数目</strong></h2><p>这部分优化的重点在于减少overdraw，指的是同一像素被绘制了多次.</p>
<h4 id="控制绘制顺序"><a href="#控制绘制顺序" class="headerlink" title="控制绘制顺序"></a><strong>控制绘制顺序</strong></h4><p>为了最大限度地避免overdraw，一个重要的优化策略就是控制绘制顺序。由于深度测试的存在，如果我们可以保证物体都是从前往后绘制的，那么就可以很大程度上减少overdraw。这是因为，在后面绘制的物体由于无法通过深度测试，因此就不会再进行后面的渲染处理。</p>
<p>在unity中，渲染队列数目小于2500(background,geomerty,alphatest)的对象都被认为是不透明opaque的物体，这些物体总体上是从前往后绘制的，而使用其他的队列(transparent,overlay等)的物体，则是从后往前绘制的。<br>这意味着，我们可以尽可能地把物体的队列设置为不透明物体的渲染队列，而尽量避免使用半透明队列。</p>
<p>例如:在射击游戏中，玩家角色使用的shader往往比较复杂，但是，由于他们通常会挡住屏幕很大一部分区域，因此，我们可以先绘制它们，使用更小的渲染队列。而对应敌人角色，它们通常会出现在各种掩体后面，因此，我们可以在所有常规的不透明物体后面渲染它们(使用更大的渲染队列)<br>对于skybox，它几乎覆盖了所有像素，并且我们知道它永远在所有物体后面，因此它的队列可以设置为Geomerty+1。这样保证不会因为它而造成overdraw。<br><strong>这些排序的思想往往可以节省很多渲染时间</strong></p>
<h4 id="时刻警惕透明物体"><a href="#时刻警惕透明物体" class="headerlink" title="时刻警惕透明物体"></a><strong>时刻警惕透明物体</strong></h4><p>对于半透明物体来说，由于它们没有开启深度写入，因此如果要得到正确的渲染效果，就必须从后往前渲染。<br>这意味着，半透明物体几乎一定会造成overdraw。</p>
<h4 id="减少实时光照和阴影"><a href="#减少实时光照和阴影" class="headerlink" title="减少实时光照和阴影"></a><strong>减少实时光照和阴影</strong></h4><p>实时光照对应移动平台是一种非常昂贵的操作。如果场景中包含了过多的点光源，并且使用了多个pass的shader，很可能会造成性能下降。<br>可以使用烘焙技术，把光照提前烘焙到一张光照纹理中，然后在运行时刻只需要根据纹理采样得到光照结果即可。</p>
<h2 id="节省宽带"><a href="#节省宽带" class="headerlink" title="节省宽带"></a><strong>节省宽带</strong></h2><h4 id="减少纹理大小"><a href="#减少纹理大小" class="headerlink" title="减少纹理大小"></a><strong>减少纹理大小</strong></h4><ul>
<li>size最好设置为2的整数幂和纹理压缩</li>
<li>模型尽可能使用mipmapping<br>因为在距离物体很远时，可以让GPU使用分辨率更小，更模糊的纹理来替代，大量节省GPU访问的像素数目.</li>
</ul>
<h4 id="利用分辨率缩放"><a href="#利用分辨率缩放" class="headerlink" title="利用分辨率缩放"></a><strong>利用分辨率缩放</strong></h4><p>unity中设置屏幕分辨率可以直接使用Screen.SetResolution。</p>
<h2 id="减少计算复杂度-1"><a href="#减少计算复杂度-1" class="headerlink" title="减少计算复杂度"></a><strong>减少计算复杂度</strong></h2><h4 id="Shader的LOD技术"><a href="#Shader的LOD技术" class="headerlink" title="Shader的LOD技术"></a><strong>Shader的LOD技术</strong></h4><p>和模型的LOD技术类似，shader的LOD技术可以控制使用的shader等级。<br>它的原理是：<br><strong>只有shader的LOD值小于某个设定的值，这个shader才会被使用，而使用了那些超过设定值的shader的物体将不会被渲染。</strong></p>
<figure class="highlight javascript hljs"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">SubShader&#123;</span><br><span class="line">	Tags&#123;<span class="hljs-string">"RenderType"</span>=<span class="hljs-string">"Opaque"</span>&#125;</span><br><span class="line">	LOD <span class="hljs-number">200</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>

<p>默认所有shader的LOD等级是无限大的，任何显卡支持的shader都可以被使用，但是我们可以通过代码去掉一些使用复杂计算的shader渲染<br>Shader.maximumLOD或Shader.globalMaximumLOD来设置LOD的最大值。</p>
<p>Unity的内置shader使用了不同的LOD值：Diffuse为200，BumpedSpecular为400</p>
<h4 id="代码优化"><a href="#代码优化" class="headerlink" title="代码优化"></a><strong>代码优化</strong></h4><p>游戏需要计算的对象，顶点，像素的数目排序是：<br>对象数&lt; 顶点数 &lt; 像素数</p>
<p>因此我们应该尽可能地把计算放在每个对象或逐顶点上。</p>
<ul>
<li>尽可能不要使用全屏的屏幕后处理效果，尽量把躲个特效合并到一个shader中，例如把颜色校正，噪声横屏幕特效和Bloom特效的最后一个Pass中进行合成。</li>
</ul>

        </div>
        
        <div class="level is-size-7 is-uppercase">
            <div class="level-start">
                <div class="level-item">
                    <span class="is-size-6 has-text-grey has-mr-7">#</span>
                    <a class="has-link-grey -link" href="/mystudy/tags/学习/">学习</a>
                </div>
            </div>
        </div>
        
        

        
        <div class="social-share"></div>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/social-share.js@1.0.16/dist/css/share.min.css">
<script src="https://cdn.jsdelivr.net/npm/social-share.js@1.0.16/dist/js/social-share.min.js"></script>
        
    </div>
</div>





<div class="card card-transparent">
    <div class="level post-navigation is-flex-wrap is-mobile">
        
        <div class="level-start">
            <a class="level level-item has-link-grey  article-nav-prev" href="/mystudy/2020/07/20/SurfaceShader1-基础/">
                <i class="level-item fas fa-chevron-left"></i>
                <span class="level-item">SurfaceShader1-基础</span>
            </a>
        </div>
        
        
        <div class="level-end">
            <a class="level level-item has-link-grey  article-nav-next" href="/mystudy/2020/07/18/shader学习23-高级雾效/">
                <span class="level-item">shader学习23-高级雾效</span>
                <i class="level-item fas fa-chevron-right"></i>
            </a>
        </div>
        
    </div>
</div>


</div>
                




<div class="column is-4-tablet is-4-desktop is-3-widescreen  has-order-1 column-left ">
    
        
<div class="card widget">
    <div class="card-content">
        <nav class="level">
            <div class="level-item has-text-centered" style="flex-shrink: 1">
                <div>
                    
                        <img class="image is-128x128 has-mb-6" src="/mystudy/images/avatar2.jpg" alt="满头大汉老黄牛">
                    
                    
                    <p class="is-size-4 is-block">
                        满头大汉老黄牛
                    </p>
                    
                    
                    <p class="is-size-6 is-block">
                        游戏
                    </p>
                    
                    
                    <p class="is-size-6 is-flex is-flex-center has-text-grey">
                        <i class="fas fa-map-marker-alt has-mr-7"></i>
                        <span>火星</span>
                    </p>
                    
                </div>
            </div>
        </nav>
        <nav class="level is-mobile">
            <div class="level-item has-text-centered is-marginless">
                <div>
                    <p class="heading">
                        文章
                    </p>
                    <p class="title has-text-weight-normal">
                        70
                    </p>
                </div>
            </div>
            <div class="level-item has-text-centered is-marginless">
                <div>
                    <p class="heading">
                        分类
                    </p>
                    <p class="title has-text-weight-normal">
                        10
                    </p>
                </div>
            </div>
            <div class="level-item has-text-centered is-marginless">
                <div>
                    <p class="heading">
                        标签
                    </p>
                    <p class="title has-text-weight-normal">
                        3
                    </p>
                </div>
            </div>
        </nav>
        <div class="level">
            <a class="level-item button is-link is-rounded" href="https://github.com/koliy/" target="_blank">
                关注我</a>
        </div>
        
        
        <div class="level is-mobile">
            
            <a class="level-item button is-white is-marginless" target="_blank"
                title="Github" href="https://github.com/koliy/">
                
                <i class="fab fa-github"></i>
                
            </a>
            
        </div>
        
    </div>
</div>
    
        


    
        
<div class="card widget">
    <div class="card-content">
        <div class="menu">
            <h3 class="menu-label">
                分类
            </h3>
            <ul class="menu-list">
            <li>
        <a class="level is-marginless" href="/mystudy/categories/3D数学基础-图形与游戏开发/">
            <span class="level-start">
                <span class="level-item">3D数学基础:图形与游戏开发</span>
            </span>
            <span class="level-end">
                <span class="level-item tag">3</span>
            </span>
        </a></li><li>
        <a class="level is-marginless" href="/mystudy/categories/AI/">
            <span class="level-start">
                <span class="level-item">AI</span>
            </span>
            <span class="level-end">
                <span class="level-item tag">12</span>
            </span>
        </a></li><li>
        <a class="level is-marginless" href="/mystudy/categories/MySql/">
            <span class="level-start">
                <span class="level-item">MySql</span>
            </span>
            <span class="level-end">
                <span class="level-item tag">1</span>
            </span>
        </a></li><li>
        <a class="level is-marginless" href="/mystudy/categories/SurfaceShader/">
            <span class="level-start">
                <span class="level-item">SurfaceShader</span>
            </span>
            <span class="level-end">
                <span class="level-item tag">1</span>
            </span>
        </a></li><li>
        <a class="level is-marginless" href="/mystudy/categories/Unity/">
            <span class="level-start">
                <span class="level-item">Unity</span>
            </span>
            <span class="level-end">
                <span class="level-item tag">1</span>
            </span>
        </a></li><li>
        <a class="level is-marginless" href="/mystudy/categories/git/">
            <span class="level-start">
                <span class="level-item">git</span>
            </span>
            <span class="level-end">
                <span class="level-item tag">3</span>
            </span>
        </a></li><li>
        <a class="level is-marginless" href="/mystudy/categories/shade学习/">
            <span class="level-start">
                <span class="level-item">shade学习</span>
            </span>
            <span class="level-end">
                <span class="level-item tag">33</span>
            </span>
        </a></li><li>
        <a class="level is-marginless" href="/mystudy/categories/xlua/">
            <span class="level-start">
                <span class="level-item">xlua</span>
            </span>
            <span class="level-end">
                <span class="level-item tag">1</span>
            </span>
        </a></li><li>
        <a class="level is-marginless" href="/mystudy/categories/网络同步/">
            <span class="level-start">
                <span class="level-item">网络同步</span>
            </span>
            <span class="level-end">
                <span class="level-item tag">10</span>
            </span>
        </a></li><li>
        <a class="level is-marginless" href="/mystudy/categories/设计模式/">
            <span class="level-start">
                <span class="level-item">设计模式</span>
            </span>
            <span class="level-end">
                <span class="level-item tag">5</span>
            </span>
        </a></li>
            </ul>
        </div>
    </div>
</div>
    
        <div class="card widget">
    <div class="card-content">
        <div class="menu">
        <h3 class="menu-label">
            归档
        </h3>
        <ul class="menu-list">
        
        <li>
            <a class="level is-marginless" href="/mystudy/archives/2020/09/">
                <span class="level-start">
                    <span class="level-item">九月 2020</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">1</span>
                </span>
            </a>
        </li>
        
        <li>
            <a class="level is-marginless" href="/mystudy/archives/2020/07/">
                <span class="level-start">
                    <span class="level-item">七月 2020</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">23</span>
                </span>
            </a>
        </li>
        
        <li>
            <a class="level is-marginless" href="/mystudy/archives/2020/06/">
                <span class="level-start">
                    <span class="level-item">六月 2020</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">17</span>
                </span>
            </a>
        </li>
        
        <li>
            <a class="level is-marginless" href="/mystudy/archives/2020/03/">
                <span class="level-start">
                    <span class="level-item">三月 2020</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">2</span>
                </span>
            </a>
        </li>
        
        <li>
            <a class="level is-marginless" href="/mystudy/archives/2020/02/">
                <span class="level-start">
                    <span class="level-item">二月 2020</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">4</span>
                </span>
            </a>
        </li>
        
        <li>
            <a class="level is-marginless" href="/mystudy/archives/2019/09/">
                <span class="level-start">
                    <span class="level-item">九月 2019</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">5</span>
                </span>
            </a>
        </li>
        
        <li>
            <a class="level is-marginless" href="/mystudy/archives/2019/08/">
                <span class="level-start">
                    <span class="level-item">八月 2019</span>
                </span>
                <span class="level-end">
                    <span class="level-item tag">18</span>
                </span>
            </a>
        </li>
        
        </ul>
        </div>
    </div>
</div>
    
        
<div class="card widget">
    <div class="card-content">
        <h3 class="menu-label">
            标签云
        </h3>
        <a href="/mystudy/tags/game/" style="font-size: 15px;">game</a> <a href="/mystudy/tags/git/" style="font-size: 10px;">git</a> <a href="/mystudy/tags/学习/" style="font-size: 20px;">学习</a>
    </div>
</div>

    
    
        <div class="column-right-shadow is-hidden-widescreen is-sticky">
        
            
<div class="card widget" id="toc">
    <div class="card-content">
        <div class="menu">
            <h3 class="menu-label">
                目录
            </h3>
            <ul class="menu-list"><li>
        <a class="is-flex" href="#影响性能的因素">
        <span class="has-mr-6">1</span>
        <span>影响性能的因素</span>
        </a><ul class="menu-list"><li>
        <a class="is-flex" href="#CPU">
        <span class="has-mr-6">1.1</span>
        <span>CPU</span>
        </a></li><li>
        <a class="is-flex" href="#GPU">
        <span class="has-mr-6">1.2</span>
        <span>GPU</span>
        </a><ul class="menu-list"><li>
        <a class="is-flex" href="#顶点处理">
        <span class="has-mr-6">1.2.1</span>
        <span>顶点处理</span>
        </a></li><li>
        <a class="is-flex" href="#片元处理">
        <span class="has-mr-6">1.2.2</span>
        <span>片元处理</span>
        </a></li><li>
        <a class="is-flex" href="#带宽">
        <span class="has-mr-6">1.2.3</span>
        <span>带宽</span>
        </a></li></ul></li></ul></li><li>
        <a class="is-flex" href="#性能瓶颈">
        <span class="has-mr-6">2</span>
        <span>性能瓶颈</span>
        </a><ul class="menu-list"><li>
        <a class="is-flex" href="#CPU的draw-call">
        <span class="has-mr-6">2.1</span>
        <span>CPU的draw call</span>
        </a></li><li>
        <a class="is-flex" href="#GPU-1">
        <span class="has-mr-6">2.2</span>
        <span>GPU</span>
        </a></li></ul></li><li>
        <a class="is-flex" href="#优化技术">
        <span class="has-mr-6">3</span>
        <span>优化技术</span>
        </a><ul class="menu-list"><li>
        <a class="is-flex" href="#CPU优化">
        <span class="has-mr-6">3.1</span>
        <span>CPU优化</span>
        </a></li><li>
        <a class="is-flex" href="#GPU优化">
        <span class="has-mr-6">3.2</span>
        <span>GPU优化</span>
        </a><ul class="menu-list"><li>
        <a class="is-flex" href="#减少需要处理的顶点数目">
        <span class="has-mr-6">3.2.1</span>
        <span>减少需要处理的顶点数目</span>
        </a></li><li>
        <a class="is-flex" href="#减少需要处理的片元数目">
        <span class="has-mr-6">3.2.2</span>
        <span>减少需要处理的片元数目</span>
        </a></li><li>
        <a class="is-flex" href="#减少计算复杂度">
        <span class="has-mr-6">3.2.3</span>
        <span>减少计算复杂度</span>
        </a></li></ul></li><li>
        <a class="is-flex" href="#节省内存带宽">
        <span class="has-mr-6">3.3</span>
        <span>节省内存带宽</span>
        </a></li></ul></li><li>
        <a class="is-flex" href="#批处理">
        <span class="has-mr-6">4</span>
        <span>批处理</span>
        </a><ul class="menu-list"><li>
        <a class="is-flex" href="#动态批处理">
        <span class="has-mr-6">4.1</span>
        <span>动态批处理</span>
        </a></li><li>
        <a class="is-flex" href="#条件限制">
        <span class="has-mr-6">4.2</span>
        <span>条件限制</span>
        </a></li><li>
        <a class="is-flex" href="#静态批处理">
        <span class="has-mr-6">4.3</span>
        <span>静态批处理</span>
        </a></li><li>
        <a class="is-flex" href="#批处理注意事项">
        <span class="has-mr-6">4.4</span>
        <span>批处理注意事项</span>
        </a></li></ul></li><li>
        <a class="is-flex" href="#减少需要处理的顶点数目-1">
        <span class="has-mr-6">5</span>
        <span>减少需要处理的顶点数目</span>
        </a><ul class="menu-list"><li>
        <a class="is-flex" href="#优化几何体">
        <span class="has-mr-6">5.1</span>
        <span>优化几何体</span>
        </a></li><li>
        <a class="is-flex" href="#模型的LOD技术">
        <span class="has-mr-6">5.2</span>
        <span>模型的LOD技术</span>
        </a></li><li>
        <a class="is-flex" href="#遮挡剔除技术">
        <span class="has-mr-6">5.3</span>
        <span>遮挡剔除技术</span>
        </a></li></ul></li><li>
        <a class="is-flex" href="#减少需要处理的片元数目-1">
        <span class="has-mr-6">6</span>
        <span>减少需要处理的片元数目</span>
        </a><ul class="menu-list"><li>
        <a class="is-flex" href="#控制绘制顺序">
        <span class="has-mr-6">6.1</span>
        <span>控制绘制顺序</span>
        </a></li><li>
        <a class="is-flex" href="#时刻警惕透明物体">
        <span class="has-mr-6">6.2</span>
        <span>时刻警惕透明物体</span>
        </a></li><li>
        <a class="is-flex" href="#减少实时光照和阴影">
        <span class="has-mr-6">6.3</span>
        <span>减少实时光照和阴影</span>
        </a></li></ul></li><li>
        <a class="is-flex" href="#节省宽带">
        <span class="has-mr-6">7</span>
        <span>节省宽带</span>
        </a><ul class="menu-list"><li>
        <a class="is-flex" href="#减少纹理大小">
        <span class="has-mr-6">7.1</span>
        <span>减少纹理大小</span>
        </a></li><li>
        <a class="is-flex" href="#利用分辨率缩放">
        <span class="has-mr-6">7.2</span>
        <span>利用分辨率缩放</span>
        </a></li></ul></li><li>
        <a class="is-flex" href="#减少计算复杂度-1">
        <span class="has-mr-6">8</span>
        <span>减少计算复杂度</span>
        </a><ul class="menu-list"><li>
        <a class="is-flex" href="#Shader的LOD技术">
        <span class="has-mr-6">8.1</span>
        <span>Shader的LOD技术</span>
        </a></li><li>
        <a class="is-flex" href="#代码优化">
        <span class="has-mr-6">8.2</span>
        <span>代码优化</span>
        </a></li></ul></li></ul>
        </div>
    </div>
</div>

        
        </div>
    
</div>

                




<div class="column is-4-tablet is-4-desktop is-3-widescreen is-hidden-touch is-hidden-desktop-only has-order-3 column-right is-sticky">
    
        
<div class="card widget" id="toc">
    <div class="card-content">
        <div class="menu">
            <h3 class="menu-label">
                目录
            </h3>
            <ul class="menu-list"><li>
        <a class="is-flex" href="#影响性能的因素">
        <span class="has-mr-6">1</span>
        <span>影响性能的因素</span>
        </a><ul class="menu-list"><li>
        <a class="is-flex" href="#CPU">
        <span class="has-mr-6">1.1</span>
        <span>CPU</span>
        </a></li><li>
        <a class="is-flex" href="#GPU">
        <span class="has-mr-6">1.2</span>
        <span>GPU</span>
        </a><ul class="menu-list"><li>
        <a class="is-flex" href="#顶点处理">
        <span class="has-mr-6">1.2.1</span>
        <span>顶点处理</span>
        </a></li><li>
        <a class="is-flex" href="#片元处理">
        <span class="has-mr-6">1.2.2</span>
        <span>片元处理</span>
        </a></li><li>
        <a class="is-flex" href="#带宽">
        <span class="has-mr-6">1.2.3</span>
        <span>带宽</span>
        </a></li></ul></li></ul></li><li>
        <a class="is-flex" href="#性能瓶颈">
        <span class="has-mr-6">2</span>
        <span>性能瓶颈</span>
        </a><ul class="menu-list"><li>
        <a class="is-flex" href="#CPU的draw-call">
        <span class="has-mr-6">2.1</span>
        <span>CPU的draw call</span>
        </a></li><li>
        <a class="is-flex" href="#GPU-1">
        <span class="has-mr-6">2.2</span>
        <span>GPU</span>
        </a></li></ul></li><li>
        <a class="is-flex" href="#优化技术">
        <span class="has-mr-6">3</span>
        <span>优化技术</span>
        </a><ul class="menu-list"><li>
        <a class="is-flex" href="#CPU优化">
        <span class="has-mr-6">3.1</span>
        <span>CPU优化</span>
        </a></li><li>
        <a class="is-flex" href="#GPU优化">
        <span class="has-mr-6">3.2</span>
        <span>GPU优化</span>
        </a><ul class="menu-list"><li>
        <a class="is-flex" href="#减少需要处理的顶点数目">
        <span class="has-mr-6">3.2.1</span>
        <span>减少需要处理的顶点数目</span>
        </a></li><li>
        <a class="is-flex" href="#减少需要处理的片元数目">
        <span class="has-mr-6">3.2.2</span>
        <span>减少需要处理的片元数目</span>
        </a></li><li>
        <a class="is-flex" href="#减少计算复杂度">
        <span class="has-mr-6">3.2.3</span>
        <span>减少计算复杂度</span>
        </a></li></ul></li><li>
        <a class="is-flex" href="#节省内存带宽">
        <span class="has-mr-6">3.3</span>
        <span>节省内存带宽</span>
        </a></li></ul></li><li>
        <a class="is-flex" href="#批处理">
        <span class="has-mr-6">4</span>
        <span>批处理</span>
        </a><ul class="menu-list"><li>
        <a class="is-flex" href="#动态批处理">
        <span class="has-mr-6">4.1</span>
        <span>动态批处理</span>
        </a></li><li>
        <a class="is-flex" href="#条件限制">
        <span class="has-mr-6">4.2</span>
        <span>条件限制</span>
        </a></li><li>
        <a class="is-flex" href="#静态批处理">
        <span class="has-mr-6">4.3</span>
        <span>静态批处理</span>
        </a></li><li>
        <a class="is-flex" href="#批处理注意事项">
        <span class="has-mr-6">4.4</span>
        <span>批处理注意事项</span>
        </a></li></ul></li><li>
        <a class="is-flex" href="#减少需要处理的顶点数目-1">
        <span class="has-mr-6">5</span>
        <span>减少需要处理的顶点数目</span>
        </a><ul class="menu-list"><li>
        <a class="is-flex" href="#优化几何体">
        <span class="has-mr-6">5.1</span>
        <span>优化几何体</span>
        </a></li><li>
        <a class="is-flex" href="#模型的LOD技术">
        <span class="has-mr-6">5.2</span>
        <span>模型的LOD技术</span>
        </a></li><li>
        <a class="is-flex" href="#遮挡剔除技术">
        <span class="has-mr-6">5.3</span>
        <span>遮挡剔除技术</span>
        </a></li></ul></li><li>
        <a class="is-flex" href="#减少需要处理的片元数目-1">
        <span class="has-mr-6">6</span>
        <span>减少需要处理的片元数目</span>
        </a><ul class="menu-list"><li>
        <a class="is-flex" href="#控制绘制顺序">
        <span class="has-mr-6">6.1</span>
        <span>控制绘制顺序</span>
        </a></li><li>
        <a class="is-flex" href="#时刻警惕透明物体">
        <span class="has-mr-6">6.2</span>
        <span>时刻警惕透明物体</span>
        </a></li><li>
        <a class="is-flex" href="#减少实时光照和阴影">
        <span class="has-mr-6">6.3</span>
        <span>减少实时光照和阴影</span>
        </a></li></ul></li><li>
        <a class="is-flex" href="#节省宽带">
        <span class="has-mr-6">7</span>
        <span>节省宽带</span>
        </a><ul class="menu-list"><li>
        <a class="is-flex" href="#减少纹理大小">
        <span class="has-mr-6">7.1</span>
        <span>减少纹理大小</span>
        </a></li><li>
        <a class="is-flex" href="#利用分辨率缩放">
        <span class="has-mr-6">7.2</span>
        <span>利用分辨率缩放</span>
        </a></li></ul></li><li>
        <a class="is-flex" href="#减少计算复杂度-1">
        <span class="has-mr-6">8</span>
        <span>减少计算复杂度</span>
        </a><ul class="menu-list"><li>
        <a class="is-flex" href="#Shader的LOD技术">
        <span class="has-mr-6">8.1</span>
        <span>Shader的LOD技术</span>
        </a></li><li>
        <a class="is-flex" href="#代码优化">
        <span class="has-mr-6">8.2</span>
        <span>代码优化</span>
        </a></li></ul></li></ul>
        </div>
    </div>
</div>

    
    
</div>

            </div>
        </div>
    </section>
    <footer class="footer">
    <div class="container1">
        <div class="level1">
            <div class="level-start1 has-text-centered-mobile1">
                <a class="footer-logo is-block has-mb-6" href="/mystudy/">
                

                
                </a>
                <p class="is-size-7">
                &copy; 2020 Koliy&nbsp;
                Powered by <a href="https://github.com/koliy/koliy.github.io" target="_blank">Hexo</a> & <a
                        href="https://github.com/ppoffice/hexo-theme-icarus" target="_blank">Icarus</a>
                
                <br>
                <span id="busuanzi_container_site_uv">
                共<span id="busuanzi_value_site_uv">0</span>个访客
                </span>
                
                </p>
            </div>
            <div class="level-end1">
            
            </div>
        </div>
    </div>
</footer>
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/moment@2.22.2/min/moment-with-locales.min.js"></script>
<script>moment.locale("zh-CN");</script>

<script>
var IcarusThemeSettings = {
    article: {
        highlight: {
            clipboard: true,
            fold: 'unfolded'
        }
    }
};
</script>


    <script src="https://cdn.jsdelivr.net/npm/clipboard@2.0.4/dist/clipboard.min.js" defer></script>



    
    
    
    <script src="/mystudy/js/animation.js"></script>
    

    
    
    
    <script src="https://cdn.jsdelivr.net/npm/lightgallery@1.6.8/dist/js/lightgallery.min.js" defer></script>
    <script src="https://cdn.jsdelivr.net/npm/justifiedGallery@3.7.0/dist/js/jquery.justifiedGallery.min.js" defer></script>
    <script src="/mystudy/js/gallery.js" defer></script>
    

    
    

<div id="outdated">
    <h6>Your browser is out-of-date!</h6>
    <p>Update your browser to view this website correctly. <a id="btnUpdateBrowser" href="http://outdatedbrowser.com/">Update
            my browser now </a></p>
    <p class="last"><a href="#" id="btnCloseUpdateBrowser" title="Close">&times;</a></p>
</div>
<script src="https://cdn.jsdelivr.net/npm/outdatedbrowser@1.1.5/outdatedbrowser/outdatedbrowser.min.js" defer></script>
<script>
    document.addEventListener("DOMContentLoaded", function () {
        outdatedBrowser({
            bgColor: '#f25648',
            color: '#ffffff',
            lowerThan: 'flex'
        });
    });
</script>


    
    
<script src="https://cdn.jsdelivr.net/npm/mathjax@2.7.5/unpacked/MathJax.js?config=TeX-MML-AM_CHTML" defer></script>
<script>
document.addEventListener('DOMContentLoaded', function () {
    MathJax.Hub.Config({
        'HTML-CSS': {
            matchFontHeight: false
        },
        SVG: {
            matchFontHeight: false
        },
        CommonHTML: {
            matchFontHeight: false
        },
        tex2jax: {
            inlineMath: [
                ['$','$'],
                ['\\(','\\)']
            ]
        }
    });
});
</script>

    
    

<a id="back-to-top" title="回到顶端" href="javascript:;">
    <i class="fas fa-chevron-up"></i>
</a>
<script src="/mystudy/js/back-to-top.js" defer></script>


    
    

    
    
    
    

    
    
    
    
    

    


<script src="/mystudy/js/main.js" defer></script>

    
    <div class="searchbox ins-search">
    <div class="searchbox-container ins-search-container">
        <div class="searchbox-input-wrapper">
            <input type="text" class="searchbox-input ins-search-input" placeholder="想要查找什么..." />
            <span class="searchbox-close ins-close ins-selectable"><i class="fa fa-times-circle"></i></span>
        </div>
        <div class="searchbox-result-wrapper ins-section-wrapper">
            <div class="ins-section-container"></div>
        </div>
    </div>
</div>
<script>
    (function (window) {
        var INSIGHT_CONFIG = {
            TRANSLATION: {
                POSTS: '文章',
                PAGES: '页面',
                CATEGORIES: '分类',
                TAGS: '标签',
                UNTITLED: '(无标题)',
            },
            CONTENT_URL: '/mystudy/content.json',
        };
        window.INSIGHT_CONFIG = INSIGHT_CONFIG;
    })(window);
</script>
<script src="/mystudy/js/insight.js" defer></script>
<link rel="stylesheet" href="/mystudy/css/search.css">
<link rel="stylesheet" href="/mystudy/css/insight.css"><!-- hexo-inject:begin --><!-- Begin: Injected MathJax -->
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({"tex2jax":{"inlineMath":[["$","$"],["\\(","\\)"]],"skipTags":["script","noscript","style","textarea","pre","code"],"processEscapes":true},"TeX":{"equationNumbers":{"autoNumber":"AMS"}}});
</script>

<script type="text/x-mathjax-config">
  MathJax.Hub.Queue(function() {
    var all = MathJax.Hub.getAllJax(), i;
    for(i=0; i < all.length; i += 1) {
      all[i].SourceElement().parentNode.className += ' has-jax';
    }
  });
</script>

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js">
</script>
<!-- End: Injected MathJax -->
<!-- hexo-inject:end -->
    
</body>
</html>